package com.bobo.myapplication.activity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.CheckResult;
import android.support.annotation.FloatRange;
import android.support.annotation.IntDef;
import android.support.annotation.IntRange;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
import android.support.annotation.StringRes;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

import com.bobo.myapplication.R;

/**
 * Created by ZJB on 2018/1/11.
 *
 * @ copyright: iwhere chengdu technology
 * 描述：
 * support-annotation 检查注解的运用，有以下三类
 * 1- Nullness注解 --> 不能有空值
 * 2- 资源类型注解 --> 限定资源类型
 * 3- IntDef 和 StringDef 注解 --> int和String的自定义注解
 */

public class AnnotationActivity extends BaseActivity {
    private String mName = null;
    private WebView mWebView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getResId());
        init();

    }


    public static void start(Context context) {
        Intent starter = new Intent(context, AnnotationActivity.class);
        context.startActivity(starter);
    }

    @LayoutRes  //表示该方法的返回值，必须是资源文件中的 layout的类型
    private int getResId() {
        return R.layout.activity_annotation;
    }

    private void init() {
        mWebView = findViewById(R.id.webview);
        //声明WebSettings子类
//        WebSettings webSettings = mWebView.getSettings();
//
////如果访问的页面中要与Javascript交互，则webview必须设置支持Javascript
//        webSettings.setJavaScriptEnabled(true);
//// 若加载的 html 里有JS 在执行动画等操作，会造成资源浪费（CPU、电量）
//// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
//
////支持插件
////        webSettings.setPluginsEnabled(true);
//
////设置自适应屏幕，两者合用
//        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
//        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//
////缩放操作
//        webSettings.setSupportZoom(true); //支持缩放，默认为true。是下面那个的前提。
//        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false，则该WebView不可缩放
//        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//
////其他细节操作
//        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
//        webSettings.setAllowFileAccess(true); //设置可以访问文件
//        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
//        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
//        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

//        mWebView.setWebViewClient(new WebViewClient() {
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                Log.e("zjb", "shouldOverrideUrlLoading: "+url );
//                mWebView.loadUrl(url);
//                return true;
//            }
//        });
//
        mWebView.loadUrl("http://note.youdao.com/noteshare?id=a634a9d0659e8173c151a7b4e6085b5e&sub=E0A0FE0B5D4D458C833F2C1562B65ABD");
    }

    @Override
    public void onBackPressed() {
        if(mWebView.canGoBack()){
            mWebView.goBack();
        }else {
            super.onBackPressed();
        }
    }

    protected void setName(@NonNull String name) {
        this.mName = name;
    }

    @CheckResult //检查返回值，必须使用返回值
    protected String getName() {
        return this.mName;
    }

    //传入值为 String 类型的资源Id
    protected void sayAppName(@StringRes int ageStringId) {
        Toast.makeText(this, getResources().getString(ageStringId), Toast.LENGTH_SHORT).show();
    }


    @FloatRange(from = 0f, to = 1f)  //返回值在 0 ~ 1之间的浮点数
    protected float getAlpa() {
        return 0;
    }

    //传入参数在0 ~ 10之间的整数
    protected void setAlpa(@IntRange(from = 0, to = 10) int alpa) {

    }

    //也可以这样对返回值进行注解
    protected @IntRange(from = 0, to = 10)
    int getType() {
        return 0;
    }

    @CallSuper
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("zjb", "onDestroy: 子类复写该方法的时候必须要调用super.onDestory(),因为使用了@CallSuper的注解！！！");
    }

//////////////使用提示注解，达到enum枚举的提示///////////////////////////

    //1- @IntDef
    public static final int TYPE_1 = 1;
    public static final int TYPE_2 = 2;
    public static final int TYPE_3 = 3;

    public static final int TYPE_4 = 4;

    @IntDef({TYPE_1, TYPE_2, TYPE_3, TYPE_4})
    public @interface TagType {
    }

    protected @TagType
    int getTagType() {
        return TYPE_1;
    }


    protected void setTagType(@TagType int tagType) {
    }

    //加上flag之后，设置的值可以 可以是 这样： setTagType(TYPE_1 | TYPE_2)...
//    @IntDef(flag = true,value = {TYPE_1,TYPE_2,TYPE_3,TYPE_4})
//    public @interface TagType{
//    }
//    protected abstract @TagType int getTagType();
//
//
//    protected void setTagType(@TagType int tagType){
//    }


    //2- @StringDef
    public static final String TYPE_AA = "aa";
    public static final String TYPE_BB = "bb";
    public static final String TYPE_CC = "cc";
    public static final String TYPE_DD = "dd";


    @StringDef({TYPE_AA, TYPE_CC, TYPE_BB, TYPE_DD})
    public @interface StringTagType {

    }

    protected @StringTagType
    String getStringTagType() {
        return TYPE_AA;
    }

    protected void setTagType(@StringTagType String stringTagType) {
    }


}
